今天要介紹的功能,是 CloudFront 的 Continuous Deployment 。
開發軟體服務的人,一定對於一個名詞不陌生,「藍綠部署」(為了避免中文寫錯會被「艦長」highlight,後續我改用 'Deployment')。我們以這篇文章來介紹搭配 CloudFront 時可以怎麼做。
就我的理解,就是透過某種機制,讓不同的用戶分別使用了不同組的設定(進而獲取不同 or 相同的結果)。
免責宣言: 如果您覺得我理解錯了,那麼一定是我錯而您對。
這次我們用一個故事來介紹
故事主角叫做肯公公,他在一間公司擔任工程師,參與了一個網站服務的開發,為了開發和測試需求,他開了幾組的 CloudFront Distribution,然後分別對應到不同環境。比方說
Dev 環境 (d111.cf.net) CNAME 設定為 dev.example.com ; origin: dev.myorigin.com
Staging 環境 (d222.cf.net) CNAME 設定為 staging.example.com ; origin: staging.myorigin.com
Production 環境 (d333.cf.net) CNAME 設定為 www.example.com ; origin: www.myorigin.com
對應的 DNS record 如下:
- dev.example.com CNAME d111.cloudfront.net
- staging.example.com CNAME d222.cloudfront.net
- www.example.com CNAME d333.cloudfront.net
經過一段時間的程式開發,整合,一切都很美好,測試順利,但老闆提了新要求,上線前要先小規模引入實際流量,看能否正常運作。
「是驢子是馬,總要拉出來溜溜才知道」老闆這樣說。
「小規模流量?簡單啊,這個我會。」肯公公輕鬆地回答。
於是肯公公調整了 DNS Record,將 www.example.com 域名解析的 10% 改指往 staging 環境, d222.cloudfront.net,同時 90% 的域名解析保留在 d333.example.com(origin: www.myorigin.com)。期望 10% 的流量會被派去 d222.cloudfront.net 這樣就可以達成老闆的要求。
沒想到,不管怎麼測試,發現看到的都是來自 www.myorigin.com 的內容,可是明明肯公公在測試 DNS 解析時,有看到解析結果符合設定的比例,解析到不同的 CNAME 啊。
這是因為 CloudFront 會以 HTTP中的 Host 標頭來判斷屬於哪一組 Distribution。(所以當某個域名已經被某個 Distribuiton 使用時,就無法設定在另一個 Distribution。)
所以,這時肯公公該怎麼做呢?
他應該要參考 CloudFront 的 Continuous Deployment
讓我們首先透過圖片來瞭解.
可以看到,當有設定 Continuous Deployment 時,透過對應 CloudFront 內部的 Policy,有一部分的流量會被導至 Staging Environment。
2. 會提醒能夠調整的設置相對有限(limited)
3. 設置你是使用 Weighted or Header,如果是 Header,你需要指定 Header Name(一定要是awf-cf-cd- 開頭的 名稱) 以及對應的值
以下介紹幾個值得關注的服務特性
可以有兩種方式使用,Weighted(CloudFront 主動挑選,最高達 15%) 或 使用特定 Header(流量送入時做為參考依據)。
如果使用 Weighted 的方式,那麼 如果使用 Header 來指定流量是否要送往 Staging 環境,那麼這 Header 的名稱必須為 aws-cf-cd- 開頭
Production 和 Staging 環境的 Cache 不能共用。
不支持 HTTP/3
(如果 Distribution 已經有啟用 HTTP/3,再啟用 Staging 時,會看到以下報錯。)
如果 CloudFront 在忙碌時,也會降低導流到 staging 的比例。(呼應前面敘述提到「最高」 15%)
參考測試網址
https://www.kgg23.com
測試方法範例:
$ curl https://www.kgg23.com
Content from the Prodution Origin
$ curl https://www.kgg23.com -H 'aws-cf-cd-kgg: ironman'
Content from the Staging Origin
Okay, 以上就是 CloudFront Continuous Deployment 的簡單介紹,一起試試看吧。
使用上有問題,也隨時歡迎留言給我。